import java.util.ArrayList;
import java.util.List;

public class Test {
    class Solution {
        public List<Integer> findAnagrams(String ss, String pp) {
            List<Integer> ret = new ArrayList<>();
            char[] s = ss.toCharArray();
            char[] p = pp.toCharArray();

            int[] hash1 = new int[26];
            for(char ch : p) {
                hash1[ch - 'a'] ++;
            }

            int[] hash2 = new int[26];
            int m = p.length;
            for(int left = 0,right = 0,count = 0;right < s.length;right ++) {
                char in = s[right];
                hash2[in - 'a'] ++;
                if(hash2[in - 'a'] <= hash1[in - 'a']) {
                    count ++;
                }

                if(right  - left + 1 > m) {
                    char out = s[left];
                    if(hash1[out  - 'a'] >= hash2[out - 'a']) {
                        count --;
                    }
                    hash2[out - 'a'] --;
                    left ++;
                }
                if(m == count) {
                    ret.add(left);
                }

            }
            return ret;
        }
    }
}
